#include "Timestamp.h"

#include <time.h>
#include <stdio.h>

Timestamp::Timestamp()
    : SecondsSinceEpoch_(0)
{
}
Timestamp::Timestamp(int64_t SecondsSinceEpoch)
    : SecondsSinceEpoch_(SecondsSinceEpoch)
{
}
// 获取表示当前时间的Timestamp实例，当前时间的时间戳
Timestamp Timestamp::now()
{
    return Timestamp(time(NULL));
}
// 时间戳转换为人类可读的本地时间字符串 year/month/day ：hour/min/sec
std::string Timestamp::tostring() const
{
    char buf[128] = {0};
    // 将秒级时间戳转换本地时间tm结构体（包含年月日时分秒）
    struct tm *tm_time = localtime(&SecondsSinceEpoch_);
    // 格式化字符串：年/月/日/ 时:分:秒
    snprintf(buf, 128, "%4d/%02d/%02d %02d:%02d:%02d",
             tm_time->tm_year + 1900,  // 年份：tm_year是从1900开始的偏移量
             tm_time->tm_mon + 1,  // 月份：tm_year范围是0-11
             tm_time->tm_mday,
             tm_time->tm_hour,
             tm_time->tm_min,
             tm_time->tm_sec);
    return buf;
}

// 可以测试时间代码编写是否有问题 g++ -o a./out Timestamp.cc -std=c++11
// int main()
// {
//     std::cout << Timestamp::now().tostring() << std::endl;
//     return 0;
// }